// 封装 HTTP 请求模块
const http = {
    // 接口 baseUrl
    baseUrl: "http://localhost:1337",

    // 请求拦截器
    beforeRequest(config) {
        // 获取本地存储的 token
        const token = uni.getStorageSync("token");
        // 设置默认的请求头
        const headers = {
            'content-type': 'application/json',
			'token':token
        };
        // 如果存在 token，则添加到请求头中
        if (token) {
            headers["token"] = token;
        }
        // 将请求头合并到配置中
        config.header = {
            ...config.header,
            ...headers
        };
        return config;
    },

    // 响应拦截器
    beforeResponse(response) {
        // 可以在这里对响应数据进行统一处理，例如状态码判断等
        return response;
    },

    // 异常处理
    errorHandle(error) {
        console.log('异常处理:', error);
    },

    // 封装请求方法
    request(config) {
        // 执行请求拦截
        config = this.beforeRequest(config);
        // 拼接完整的请求 URL
        config.url = this.baseUrl + config.url;

        return new Promise((resolve, reject) => {
            // 发起请求
            uni.request(config)
               .then((res) => {
                    // 执行响应拦截
                    const response = this.beforeResponse(res);
                    resolve(response);
                })
               .catch((error) => {
                    // 处理请求异常
                    this.errorHandle(error);
                    reject(error);
                });
        });
    },

    // GET 请求方法
    get(url, params = {}) {
        return this.request({
            url,
            data: params,
            method: "GET"
        });
    },

    // POST 请求方法
    post(url, data = {}) {
        return this.request({
            url,
            data,
            method: "POST"
        });
    },

    // PUT 请求方法
    put(url, data = {}) {
        return this.request({
            url,
            data,
            method: "PUT"
        });
    },

    // DELETE 请求方法
    delete(url, data = {}) {
        return this.request({
            url,
            data,
            method: "DELETE"
        });
    }
};

export default http;